define(function(require, exports){
	var $ = require("jquery");
	var util = require('util');
	var pubjs = require('pubjs');
	var view  = require('@base/view');

	var Edit = view.container.extend({
		init: function( config ) {
			config = pubjs.conf(config, {
				// 在dialog中时影藏保存取消按钮
				'showButton': true,
				'class': 'P-productEdit',
				'urlProductInfo': 'product/info',
				'urlProductAdd': 'product/add',
				'urlProductUpdate': 'product/update',
				'urlProductLabelList': 'product/listLabel'
			});
			this.Super('init', arguments);
		},
		afterBuild: function() {
			var self = this;
			var c = self.getConfig();
			var el = self.getDOM();
			var doms = self.$doms = {};

			$([
				'<div class="M-formHead">',
					// '<span class="M-formHeadTitle">'+LANG('产品信息')+'</span>',
				'</div>',
				'<div class="M-formCon">',

					'<div class="M-formConGroup">',
						'<label class="group-label">'+LANG('名称：')+'</label>',
						'<div class="group-content">',
							'<span pub-name="name" pub-mod="@base/common/input.text"/>',
						'</div>',
					'</div>',

					'<div class="M-formConGroup">',
						'<label class="group-label">'+LANG('自定义ID：')+'</label>',
						'<div class="group-content">',
							'<span pub-name="customID" pub-mod="@base/common/input.text"/>',
						'</div>',
					'</div>',

					'<div class="M-formConGroup">',
						'<label class="group-label">'+LANG('封面：')+'</label>',
						'<div class="group-content">',
							'<span pub-name="Cover" pub-mod="modules/upload.base"/>',
						'</div>',
					'</div>',

					'<div class="M-formConGroup">',
						'<label class="group-label">'+LANG('说明：')+'</label>',
						'<div class="group-content">',
							'<span pub-name="description" pub-mod="@base/common/input.text"/>',
							'<span class="ml10" pub-name="tipDescription" pub-mod="@base/tip.desc"/>',
						'</div>',
					'</div>',

					'<div class="M-formConGroup">',
						'<label class="group-label">'+LANG('标签：')+'</label>',
						'<div class="group-content" pub-name="labelList" pub-mod="@base/taglabels.base"/>',
					'</div>',

				'</div>',
				'<div class="M-formButtons productEditBtnCon">',
					'<span pub-mod="@base/common/input.button" pub-name="cancel" />',
					'<span pub-mod="@base/common/input.button" pub-name="save" />',
					'<span pub-mod="@base/common/input.button" pub-name="saveAndAdd" />',
				'</div>'
			].join('')).appendTo(el);


			if (!c.showButton) {
				self.find('.productEditBtnCon').hide();
			}

			// 模块参数
			self.buildFromTemplate({
				'name': {
					'value': LANG('新建产品') + '_' + util.date('YmdHis'),
					'width': '70%'
				},
				'customID': {
					'placeholder': LANG('选填'),
					'width': '70%'
				},
				'Cover': pubjs.config('uploader/cover'),
				'description': {
					'placeholder': LANG('选填，可填入额外说明'),
					'width': '70%'
				},
				'tipDescription': {
					'data': LANG('给产品添加描述以便管理')
				},
				'labelList': {
					'hasLabel': false,
					'label': LANG('标签：'),
					'reqType': 'websocket',
					'tips': LANG('给产品添上标签，方便管理。多个标签用“,”分开'),
					'database': c.urlProductLabelList
				},
				'save': {
					'value': LANG('保存'),
					'class': 'btn btn-confirm mr10 mt10'
				},
				'cancel': {
					'value': LANG('取消'),
					'class': 'btn btn-link mr10 mt10'
				},
				'saveAndAdd': {
					'value': LANG('保存并新建'),
					'class': 'btn btn-confirm mr10 mt10'
				}
			});
		},
		load: function( id ) {
			pubjs.sync();
			var self = this;
			self.$id = +id;
			self.showLoading();
			pubjs.mc.send(self.getConfig('urlProductInfo'), {
				_id: +id
			}, self.onData.bind(self));
		},
		onData: function( err, data ) {
			pubjs.sync(true);
			this.hideLoading();
			if(err){
				pubjs.error(err);
				pubjs.alert(err.message);
				return false;
			}
			if(!data){
				pubjs.alert(LANG('无数据'));
				return false;
			}
			this.setData(data);
		},
		setData: function( data ) {
			var self = this;
			if(data){

				// var doms = self.$doms;
				var mods = self.$;
				mods['name'].setValue(data.Name);
				mods['customID'].setValue(data.CustomID);
				mods['description'].setValue(data.Description || '');
				mods['labelList'].setData(data.Labels);
				mods['Cover'].reset();
				if (data.Cover) {
					mods['Cover'].setValue(data.Cover);
				}
			}
			return self;
		},
		onInputClick: function( ev ) {
			var name = ev.name;
			switch( name ) {
				case 'cancel':
					this.cancel();
				break;
				case 'save':
					this.save();
				break;
				case 'saveAndAdd':
					this.save('saveAndAdd');
				break;
			}
			return false;
		},
		cancel: function() {
			pubjs.controller.navigate('product');
			this.reset();
		},
		getData: function() {
			var mods = this.$;
			var labels = mods['labelList'].getData();
			return {
				'Name': util.trim(mods['name'].getValue()),
				'CustomID': util.trim(mods['customID'].getValue()),
				'Description': util.trim(mods['description'].getValue()),
				'Labels': labels,
				'Cover': mods['Cover'].getValue()[0] || ''
			};
		},
		save: function(saveAndAdd) {
			var self = this;
			var data = self.getData();
			if(!data['Name']) {
				pubjs.alert(LANG('产品名称不能为空！'));
				return false;
			}
			if(data.Name.length > 50)
			{
				pubjs.alert(LANG('产品名称限制为50个字符！'));
				return false;
			}

			pubjs.loading.show();
			// 编辑状态
			if( self.$id ) {
				data._id = self.$id;
				pubjs.mc.send(
					self.getConfig('urlProductUpdate')
					,data
					,self.onSave.bind( self )
					,saveAndAdd
				);
			}
			// 添加新产品
			else {
				pubjs.mc.send(
					self.getConfig('urlProductAdd')
					,data
					,self.onSave.bind(self)
					,saveAndAdd
				);
			}
		},
		onSave: function( err, data, saveAndAdd ) {
			var c = this.getConfig();
			pubjs.loading.hide();
			if (err) {
				pubjs.error(err);
				pubjs.alert(err.message);
				return false;
			}

			pubjs.alert(LANG('保存成功'));

			if (!c.showButton) {
				this.fire('saveProductSuccess', {data: data});
			} else {
				if(saveAndAdd){
					pubjs.controller.navigate('product/edit');
				}else{
					pubjs.controller.navigate('product');
				}

			}
			this.reset();
		},
		reset: function() {
			var mods = this.$;
			mods['name'].setValue( LANG('新建产品') + '_' + util.date('YmdHis') );
			mods['customID'].setValue('');
			mods['description'].setValue('');
			mods['Cover'].reset();

			mods['labelList'].refresh();
			mods['labelList'].reset();
			return this;
		}
	});
	exports.main = Edit;
});